package com.huahua.api.exception;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 文本对比错误码枚举
 *
 * @author Huahua-Ai
 * @date 2025-07-13 21:20:00
 * @description 定义文本对比功能的错误码和错误信息
 */
@Getter
@AllArgsConstructor
public enum ComparisonErrorCode {

    // 参数验证错误 (1001-1099)
    PARAM_MISSING(1001, "必填参数缺失: {0}"),
    PARAM_INVALID(1002, "参数格式无效: {0}"),
    TEXT_EMPTY(1003, "文本内容不能为空"),
    TEXT_TOO_LONG(1004, "文本长度超过限制，最大允许 {0} 字符"),
    TEXT_TOO_MANY_LINES(1005, "文本行数超过限制，最大允许 {0} 行"),
    BATCH_SIZE_EXCEEDED(1006, "批量任务数超过限制，最大允许 {0} 个"),
    REGEX_INVALID(1007, "正则表达式无效: {0}"),
    REGEX_DANGEROUS(1008, "正则表达式存在ReDoS风险: {0}"),
    CONFIG_INVALID(1009, "配置参数无效: {0}"),

    // 业务逻辑错误 (1100-1199)
    COMPARISON_FAILED(1100, "文本对比处理失败: {0}"),
    CACHE_ERROR(1101, "缓存操作失败: {0}"),
    EXPORT_FAILED(1102, "导出文件生成失败: {0}"),
    BATCH_PARTIAL_FAILURE(1103, "批量处理部分失败，成功 {0} 个，失败 {1} 个"),
    HISTORY_NOT_FOUND(1104, "历史记录不存在: {0}"),
    HISTORY_SAVE_FAILED(1105, "历史记录保存失败: {0}"),

    // 认证授权错误 (1200-1299)
    API_KEY_MISSING(1200, "API Key缺失"),
    API_KEY_INVALID(1201, "API Key无效"),
    API_KEY_EXPIRED(1202, "API Key已过期"),
    RATE_LIMIT_EXCEEDED(1203, "请求频率超限，请 {0} 秒后重试"),
    PERMISSION_DENIED(1204, "权限不足: {0}"),

    // 系统错误 (1300-1399)
    SYSTEM_ERROR(1300, "系统内部错误，请稍后重试"),
    SERVICE_UNAVAILABLE(1301, "服务暂时不可用"),
    RESOURCE_NOT_FOUND(1302, "请求的资源不存在: {0}"),
    TIMEOUT_ERROR(1303, "处理超时，请减少文本大小或稍后重试"),
    MEMORY_INSUFFICIENT(1304, "内存不足，无法处理大文本"),

    // WebSocket错误 (1400-1499)
    WEBSOCKET_CONNECTION_FAILED(1400, "WebSocket连接失败: {0}"),
    WEBSOCKET_MESSAGE_INVALID(1401, "WebSocket消息格式无效"),
    WEBSOCKET_SESSION_NOT_FOUND(1402, "WebSocket会话不存在");

    private final int code;
    private final String message;

    /**
     * 格式化错误信息
     *
     * @param args 参数列表
     * @return 格式化后的错误信息
     */
    public String formatMessage(Object... args) {
        if (args == null || args.length == 0) {
            return message;
        }

        String formattedMessage = message;
        for (int i = 0; i < args.length; i++) {
            formattedMessage = formattedMessage.replace("{" + i + "}", String.valueOf(args[i]));
        }
        return formattedMessage;
    }

    /**
     * 创建异常
     *
     * @param args 参数列表
     * @return CommonException
     */
    public CommonException toException(Object... args) {
        return new CommonException(code, formatMessage(args));
    }

    /**
     * 创建带原因的异常
     *
     * @param cause 原因
     * @param args  参数列表
     * @return CommonException
     */
    public CommonException toException(Throwable cause, Object... args) {
        return new CommonException(code, formatMessage(args), cause);
    }
}
